#ifndef EMPLOYEEMANAGER_H
#define EMPLOYEEMANAGER_H

#include <QObject>
#include <QString>
#include <QMap>
#include <QVariantList>
#include <QVariant>
#include "sqloperator.h"

class SqlOperator;


class EmployeeManager : public QObject
{
    Q_OBJECT
public:
    explicit EmployeeManager(QObject *parent = nullptr);
    ~EmployeeManager();

    // 初始化数据库连接
    bool initDatabase();

    // 关闭数据库连接
    void closeDatabase();


    // 查看员工信息
    QMap<QString, QString> getEmployeeInfo(const QString &empId);

    // 打卡签到
    bool checkIn(const QString &empId);

    // 打卡签退
    bool checkOut(const QString &empId);

    // 获取指定日期的打卡记录
    QVariantList getAttendanceRecord(const QString &empId, const QString &date);

    // 提交部门调换申请
    bool submitDepartmentChangeRequest(const QString &empId, int newDeptId, const QString &reason);

    // 获取员工的部门调换申请
    QVariantList getDepartmentChangeRequests(const QString &empId);

    // 撤销部门调换申请
    bool cancelDepartmentChangeRequest(int requestId);

    // 提交请假申请
    bool submitLeaveRequest(const QString &empId, const QString &leaveType, const QString &startDate, const QString &endDate, const QString &reason);

    // 获取员工的请假申请
    QVariantList getLeaveRequests(const QString &empId);

    // 撤销请假申请
    bool cancelLeaveRequest(int requestId);

    // 获取工资详情
    QVariantList getSalaryDetails(const QString &empId);
    // 根据日期范围获取工资详情
    QVariantList getSalaryDetailsByDateRange(const QString &empId, const QString &startDate, const QString &endDate);

    // 获取考核详情
    QVariantList getAssessmentDetails(const QString &empId);

    // 根据日期范围获取考核详情
    QVariantList getAssessmentDetailsByDateRange(const QString &empId, const QString &startDate, const QString &endDate);

signals:
    // 打卡状态更新信号
    void checkStatusUpdated(const QString &status);

    // 操作结果信号
    void operationResult(bool success, const QString &message);

private:
    // 数据库操作对象
    SqlOperator *m_dbOperator;

    // 是否拥有数据库操作对象
    bool m_ownsDbOperator;

};

#endif // EMPLOYEEMANAGER_H
